/**
 * jims
 */
package com.jims.master.modules.drug.dao;

import com.jims.master.common.persistence.CrudDao;
import com.jims.master.common.persistence.annotation.MyBatisDao;
import com.jims.master.modules.drug.entity.DrugExportDetail;
import com.jims.master.modules.drug.entity.DrugImportDetail;
import com.jims.master.modules.drug.entity.DrugInfo;
import com.jims.master.modules.drug.entity.DrugStock;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 药品库存管理DAO接口
 * @author zhuq
 * @version 2017-03-10
 */
@MyBatisDao
public interface DrugStockDao extends CrudDao<DrugStock> {

    /**
     * 查询库存
     * @param drugStock
     * @return
     * @author fengyg
     */
    public List<DrugStock> getList(DrugStock drugStock);

    /**
     * 根据药品code,批号，所在库房,orgId获取是否存在该批次药品
     * @return
     * @author  zhuq
     */
    public List<DrugStock> findByBatchNo(DrugStock drugStock);

    /**
     * 库存量查询
     * @param drugStock
     * @return
     */
    public List<DrugStock> findDrugList(DrugStock drugStock);

    /**
     * 药品信息查询
     * @param drugStock
     * @return
     */
    public List<DrugStock> findDrugByInfoId(DrugStock drugStock);
    /**
     * 合并批号库存量查询
     * @param drugStock
     * @return
     */
    public List<DrugStock> findDrugListbat(DrugStock drugStock);

    /**
     * 过期药品查找
     * @param drugStock
     * @return
     */
    public List<DrugStock> findDrugStock(DrugStock drugStock);

    /**
     * 盘点药品列表
     * @param drugStock
     * @return
     */
    public List<DrugStock> findInventoryStock(DrugStock drugStock);

    /**
     * 根据待发药处方主表的Id组装成待发药库存表list
     * @param applyId
     * @return
     * @ZhuQ
     */
    public List<DrugStock> findByApplyId(@Param("applyId") String applyId);

    /**
     * 根据住院已发药处方主表的Id组装成待发药库存表list
     * @param applyId
     * @return
     * @ZhuQ
     */
    public List<DrugStock> findByApplyBill(@Param("applyId") String applyId);


    /**
     * 根据库房id,drugInfo，orgId查询库存量的和
     * @param drugStock
     * @return
     * @ZhuQ
     */
    public List<DrugStock> findByQuantity(DrugStock drugStock);

    /**
     * 根据根据drugInfo,storageId,orgId查询所有未过期的库存list
     * @param drugStock
     * @return
     * @ZhuQ
     */
    public List<DrugStock> findByExpireDate(DrugStock drugStock);
    /**
     * 销售药品查询
     * @param drugStock
     * @return
     */
   // public Page<DrugStock> findAccountPage(@Param("page") Page<DrugStock> page,DrugStock drugStock);
    public List<DrugStock> findAccountPage(DrugStock drugStock);
    /**
     * 销售药品查询(退药)
     * @param drugStock
     * @return
     */
    public List<DrugStock> findAccountPageBack(DrugStock drugStock);

    /**
     * 根据根据drugInfo,storageId,orgId查询所有库存大于0的list
     * @param drugStock
     * @return
     * @ZhuQ
     */
    public List<DrugStock> findByInfoId(DrugStock drugStock);

    /**
     *根据visitId 获取待退费医嘱药品list
     * @return
     * @author zhuq
     */
    public List<DrugStock> findByVisitId(DrugStock drugStock);

    /**
     * 根据infoId和库存量查询库存信息
     * @param drugStock
     * @return
     * @author fengyg
     */

    public DrugStock findByInfoIdQuantity(DrugStock drugStock);

    public int findDocumentNo (DrugStock drugStock);
    //出库头表插数
    public int insertMaster (DrugStock drugStock);
    //出库子表插数
    public int insertDetail (DrugStock drugStock);
    //判断当前科室是否为库房
    public int ifStockExist (DrugStock drugStock);
    //判断入出库药品是否库房中存在
    public int findDrugInfo (DrugImportDetail drugImportDetail);
    //库存表插入一条数量是0的数据
    public void stockInsertZero (DrugImportDetail drugImportDetail);
    /**
     * 药品入出库对消选择药品自动补全(当前库房)
     * @param drugInfo 药品基本信息
     * @param orgId 组织机构ID
     * @param storageId 库房ID
     * @return
     * @author zyg
     * @date 2017-03-17
     */
    public List<DrugExportDetail> autoDrugInOut(@Param("drugInfo") DrugInfo drugInfo, @Param("orgId") String orgId, @Param("q") String q, @Param("limit") String limit,@Param("storageId")String
            storageId);

}